/**
 * 
 */
package com.feib.stms.service;

import org.springframework.transaction.annotation.Transactional;

import com.feib.stms.model.User;
import com.feib.stms.pagination.PaginatedList;

/**
 * @author Jimmy Liu
 *
 */
@Transactional(readOnly = true)
public interface UserService {

	/**
	 * 以使用者帳號與群組代號取得使用者物件資訊，必須包含Roles與Menus
	 * @param userId
	 * @param groupNo
	 * @return
	 */
	public User findLoginDataByUserIdGroupNo(String userId, String groupNo);

	
	/**
	 * 更新密碼錯誤次數、驗證碼錯誤次數、是否鎖定欄位
	 * <li>locked</li>
	 * <li>pwdErrorTime</li>
	 * <li>captchaErrorTime</li>
	 * @param user
	 * @return
	 */
	@Transactional(readOnly = false)
	public int loginFail(User user);


	/**
	 * 登入成功後，必須更新下列欄位
	 * <li>enabled = true </li>
	 * <li>locked = false </li>
	 * <li>lastLogingDate=now </li>
	 * <li>pwdErrorTime=0 </li>
	 * <li>captchaErrorTime=0 </li>
	 * @param user
	 */
	@Transactional(readOnly = false)
	public int loginSuccess(User user);


	public User findByUserIdGroupNo(String userId, String groupNo);


	public User findByUerPk(Long userPk);
	
	/**
	 * 密碼變更
	 * @param user
	 */
	@Transactional(readOnly = false)
	public int changePwdSuccess(User user);
	
	/** 分頁查詢使用者資料
	 * @param user
	 * @param paginationConfig
	 * @return PaginatedList<User>
	 */
	public PaginatedList<User> queryByUser(User user, PaginatedList<User> paginationConfig);
	
	/** 查詢userId是否重複 --新增使用
	 * @param userId
	 * @param groupPk
	 * @return
	 */
	public int countUserId(String userId,Long groupPk);
	
	/** 查詢userId是否重複 --修改使用
	 * @param userPk
	 * @param userId
	 * @param groupPk
	 * @return
	 */
	public int countUserId(Long userPk, String userId,Long groupPk);
	
	/** 新增使用者
	 * @param user
	 * @return
	 */
	public int saveUser(User user);
	
	/** 修改使用者
	 * @param user
	 * @return
	 */
	public int updateUser(User user);
	
	/** 根據使用者帳號查詢使用者
	 * @param userId
	 * @param groupPk
	 * @return
	 */
	public User findByUerId(String userId,Long groupPk);
}
